package com.zy.explore.client.infrastructure.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

/**
 * 建类说明：属性文件工具类
 *
 * @author 中国印
 * @date 2022年02月12日 22:03:21
 */
@Slf4j
public class PropertiesUtil {

    public static final Properties PROPERTIES;

    // Tomcat运行时执行
    // 代码块执行顺序：静态代码块>普通代码块>构造代码块
    // 构造代码块每次都执行，但是静态代码块只执行一次
    static {
        String propertiesFile = "application.properties";
        String ymlFile = "bootstrap.yml";
        PROPERTIES = new Properties();
        InputStream propertiesStream = null;
        try {
            propertiesStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesFile);
            if (propertiesStream != null) {
                PROPERTIES.load(new InputStreamReader(propertiesStream, StandardCharsets.UTF_8));
            }
            propertiesStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(ymlFile);
            if (propertiesStream != null) {
                PROPERTIES.load(new InputStreamReader(propertiesStream, StandardCharsets.UTF_8));
            }
        } catch (IOException e) {
            log.error("配置文件读取异常", e);
        } finally {
            if (propertiesStream != null) {
                try {
                    propertiesStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    /**
     * 方法说明：通过key获取properties的配置value
     *
     * @param key key值
     * @return {@link String }
     */
    public static String getProperty(String key) {
        String value = PROPERTIES.getProperty(key.trim());
        if (StringUtils.isBlank(value)) {
            return null;
        }
        return value.trim();
    }

    /**
     * 方法说明：通过key获取properties的配置value，如果配置值为空，则使用defaultValue
     *
     * @param key          key值
     * @param defaultValue 默认值
     * @return {@link String }
     */
    public static String getProperty(String key, String defaultValue) {
        String value = PROPERTIES.getProperty(key.trim());
        if (StringUtils.isBlank(value)) {
            value = defaultValue;
        }
        return value.trim();
    }
}
